#include "useofoperator.h"
#include <iostream>
using namespace std;

#include <cmath>

UseOfOperator::UseOfOperator()
{

}

// 运算符
void UseOfOperator::show(){
    cout << "====================UseOfOperator show===========================" << endl;

    // 1、算术运算符
    {
        cout << endl << endl;
        cout << "算术运算符==============================================="
           << endl;
        cout << "| + |把两个操作数相加	A + B 将得到 30" << endl;
        cout << "| - | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |"
           << endl;
        cout << "| * | 把两个操作数相乘 | A * B 将得到 200 |" << endl;
        cout << "| / | 分子除以分母 | B / A 将得到 2 |" << endl;
        cout << "| % | 取模（取余数）运算符，整除后的余数 | B % A 将得到 0 |"
           << endl;
        cout << "| ++| 自增运算符，整数值增加 1 | A++ 将得到 11 |" << endl;
        cout << "| –- | 自减运算符，整数值减少 1 | A– 将得到 9 |" << endl;

        cout << endl << endl;
        int a = 29;
        int b = 10;

        cout << "变量a的值为：" << a << "\t变量b的值为：" << b
           << "\t a + b的值是 " << a + b << endl;
        cout << "变量a的值为：" << a << "\t变量b的值为：" << b
           << "\t a - b的值是 " << a - b << endl;
        cout << "变量a的值为：" << a << "\t变量b的值为：" << b
           << "\t a * b的值是 " << a * b << endl;
        cout << "变量a的值为：" << a << "\t变量b的值为：" << b
           << "\t a / b的值是 " << a / b << endl;
        cout << "变量a的值为：" << a << "\t变量b的值为：" << b
           << "\t a % b;的值是 " << a % b << endl;
        int cd = 100;
        int d = 0;
        d = cd++;  //++ 计算后++；
        cout << "变量cd的值为：" << cd << "\t d = cd++;变量d的值为：" << d
           << endl;

        d = cd--;
        cout << "变量cd的值为：" << cd << "\t d = cd--;变量d的值为：" << d
           << endl;

        float aa = 29.0;
        float bb = 10.0;
        float cc = 0.0;

        cc = aa/bb;
        cout << "cc: " << cc << endl;
    }

    // 关系运算符
        {
          cout << endl << endl;
          cout << "关系运算符==============================================="
               << endl;
          //   运算符	描述	实例
          //   ==	检查两个操作数的值是否相等，如果相等则条件为真。
          //   (A == B) 不为真。
          //   (A != B)	检查两个操作数的值是否相等，如果不相等则条件为真。
          //   (A != B) 为真。
          //    >
          //   检查左操作数的值是否大于右操作数的值，如果是则条件为真。
          //   (A > B) 不为真。 <
          //   检查左操作数的值是否小于右操作数的值，如果是则条件为真。
          //   (A < B) 为真。
          //   >=	检查左操作数的值是否大于或等于右操作数的值，如果是则条件为真。
          //   (A >= B) 不为真。
          //   <=	检查左操作数的值是否小于或等于右操作数的值，如果是则条件为真。
          //   (A <= B) 为真。

          int a = 21;
          int b = 10;
          int c;
          if (a == b) {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a等于 b"
                 << endl;
          } else {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a 不等于 b"
                 << endl;
          }
          if (a < b) {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a 小于 b"
                 << endl;
          } else {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a 不小于 b"
                 << endl;
          }
          if (a > b) {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a 大于 b"
                 << endl;
          } else {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a 不大于 b"
                 << endl;
          }
          cout << "改变 a 和 b 的值 " << endl;
          a = 5;
          b = 20;
          if (a <= b) {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t a 小于或等于 b"
                 << endl;
          }
          if (b >= a) {
            cout << "a的值为：" << a << "\t b的值为：" << b << "\t\t b 大于或等于 a"
                 << endl;
          }
        }

        // 逻辑运算符
        // 判断 且
        //     或
        //     非
        {
          cout << endl << endl;
          cout << "逻辑运算符==============================================="
               << endl;
          // 且：并且--多个条件要同时为真 true---true
          // 或: 多个条件只要有一个为真，结果就为真
          // 非: 求反义~~  如果条件为真，结果为假，条件为假，结果为真；

          // 运算符	描述	实例
          // &&	称为逻辑与运算符。如果两个操作数都非零，则条件为真。
          // (A && B) 为假。
          // ||
          // 称为逻辑或运算符。如果两个操作数中有任意一个非零，则条件为真。
          // (A || B) 为真。 !
          // 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。
          // !(A && B) 为真。

          int a = 5;
          int b = 20;
          //int c;
          if (a && b) {
            cout << "Line 1 - 条件为真" << endl;
          }
          if (a || b) {
            cout << "Line 2 - 条件为真" << endl;
          }
          /* 改变 a 和 b 的值 */
          a = 0;
          b = 10;
          if (a && b) {
            cout << "Line 3 - 条件为真" << endl;
          } else {
            cout << "Line 4 - 条件不为真" << endl;
          }
          if (!(a && b)) {
            cout << "Line 5 - 条件为真" << endl;
          }
        }

        // 位运算符
        {
          cout << endl << endl;
          cout << "位运算符===============================================" << endl;
          //      位运算符作用于位，并逐位执行操作。&、 | 和 ^ 的真值表如下所示：
          //      p	q	p & q	p | q	p ^ q
          //      0	0	0	0	0
          //      0	1	0	1	1
          //      1	1	1	1	0
          //      1	0	0	1	1
          //      假设如果 A = 60，且 B = 13，现在以二进制格式表示，它们如下所示：

          //      A =   0011 1100
          //      B =   0000 1101
          //      -—————-
          //      A&B = 0000 1100

          //      A|B = 0011 1101

          //      A^B = 0011 0001

          //      ~A = 1100 0011

          unsigned int a = 60;  // 60 = 0011 1100
          unsigned int b = 13;  // 13 = 0000 1101
          int c = 0;
          cout << "a的十进制为：60 ;a的二进制位：0011 1100 " << endl;
          cout << "b的十进制为：13 ;b的二进制位：0000 1101 " << endl;

          c = a &
              b;  // 12 = 0000 1100      //判断所在的二进制位，都为1 则为1 否则为0
          cout << "执行c = a & b后； c 的值是 " << c << endl;

          c = a |
              b;  // 61 = 0011 1101     //判断所在的二进制位，都为0 则为0 否则为1
          cout << "执行c = a | b后； c 的值是 " << c << endl;

          c = a ^ b;  // 49 = 0011 0001
          cout << "执行c = a ^ b后； c 的值是 " << c << endl;

          c = ~a;  // -61 = 1100 0011
          cout << "执行c = ~a后； c 的值是 " << c << endl;

          c = a << 2;  // 240 = 1111 0000
          cout << "执行c = a << 2后； c 的值是 " << c << endl;

          c = a >> 2;  // 15 = 0000 1111
          cout << "执行c = a >> 2后； c 的值是 " << c << endl;
        }
        // 赋值运算符
        {
          cout << endl << endl;
          cout << "赋值运算符==============================================="
               << endl;
          // 运算符	描述	实例
          // =	简单的赋值运算符，把右边操作数的值赋给左边操作数	C
          // = A + B 将把 A + B 的值赋给 C
          // +=
          // 加且赋值运算符，把右边操作数加上左边操作数的结果赋值给左边操作数
          // C += A 相当于 C = C + A
          // -=
          // 减且赋值运算符，把左边操作数减去右边操作数的结果赋值给左边操作数
          // C -= A 相当于 C = C - A
          // *= |
          // 乘且赋值运算符，把右边操作数乘以左边操作数的结果赋值给左边操作数
          // | C *= A 相当于 C = C * A | | /= |
          // 除且赋值运算符，把左边操作数除以右边操作数的结果赋值给左边操作数
          // | C /= A 相当于 C = C / A | | %= |
          // 求模且赋值运算符，求两个操作数的模赋值给左边操作数 | C %= A
          // 相当于 C = C % A | | «= | 左移且赋值运算符 | C «= 2 等同于 C =
          // C « 2 | | »= | 右移且赋值运算符 | C »= 2 等同于 C = C » 2 | |
          // &= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 | | ^= |
          // 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 | | |= |
          // 按位或且赋值运算符 | C |= 2 等同于 C = C | 2 |

          int a = 21;
          int c;
          c = a;
          cout << "a 的值 = : " << a << endl;
          cout << "= \t运算符实例，执行c = a后：,c 的值 = : " << c << endl;
          c += a;
          cout << "+= \t运算符实例，执行c += a后：,c 的值 = : " << c << endl;
          c -= a;
          cout << "-= \t运算符实例，执行c -= a后：,c 的值 = : " << c << endl;
          c *= a;
          cout << "*= \t运算符实例，执行c *= a后：,c 的值 = : " << c << endl;
          c /= a;
          cout << "/= \t运算符实例，执行c /= a后：,c 的值 = : " << c << endl;
          c = 200;
          c %= a;
          cout << "%= \t运算符实例，执行c = 200; c %= a后：,c 的值 = : " << c
               << endl;
          c <<= 2;
          cout << "<<= \t运算符实例，执行c <<= 2后：,c 的值 = : " << c << endl;
          c >>= 2;
          cout << ">>= \t运算符实例，执行c >>= 2后：,c 的值 = : " << c << endl;
          c &= 2;
          cout << "&= \t运算符实例，执行c &= 2后：,c 的值 = : " << c << endl;
          c ^= 2;
          cout << "^= \t运算符实例，执行c ^= 2后：,c 的值 = : " << c << endl;
          c |= 2;
          cout << "|= \t运算符实例，执行c |= 2后：,c 的值 = : " << c << endl;
        }

        {
          //? : 运算符
          int i = 30;
          bool j = i > 20 ? true : false;
          cout << "i的值为30， i是否大于20？   " << j << endl;
        }

        // 数学运算；
        cout << endl << endl;
        cout << "数学运算；===========================================" << endl;

        double d = 200.374;
        long l = 100000;
        short s = 10;
        short y = 2;
        int i = -1000;
        float f = 230.47;

        // 数学运算
        cout << "d=" << d << "\t 正弦: sin(d) :" << sin(d) << endl;
        cout << "d=" << d << "\t 余弦: cos(d) :" << cos(d) << endl;
        cout << "d=" << d << "\t 正切: tan(d) :" << tan(d) << endl;
        cout << "l=" << l << "\t 自然对数: tan(d) :" << log(d) << endl;
        cout << "s=" << s << " y=" << y << "\t s的y次方: pow(s,y) :" << pow(s, y)
             << endl;

        cout << "s=" << s << " y=" << y
             << "\t (s的平方+y的平方)的平方根， "
                "就勾股定理的，知道两个直角边，求斜边:"
             << hypot(s, y) << endl;

        cout << "l=" << l << "\t l的平方根: sqrt(l) :" << sqrt(l) << endl;
        cout << "i=" << i << "\t l的绝对值: abs(i)  :" << abs(i) << endl;
        cout << "i=" << i << "\t 返回任意十进制数的绝对值:" << fabs(i) << endl;
        cout << "f=" << f
             << "\t 返回一个小于或等于f的最大整数: floor(f)  :" << floor(f) << endl;

}
